package com.changan.service.impl;

import com.changan.entity.Menu;
import com.changan.mapper.MenuMapper;
import com.changan.service.MenuService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.changan.util.MenuTreeBuilder;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 菜单表 服务实现类
 * </p>
 *
 * @author xsy
 * @since 2021-08-26
 */
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {

    @Override
    public List<Menu> buildMenuTree() {


//        //尽量封装成一个方法，以后任何项目都是可以直接使用得
//        //假设用户就叫admin
        String username="admin";
        List<Menu> menuList = this.baseMapper.getMenuByUserName(username);

        return MenuTreeBuilder.build(menuList);
//
////        //先打印一下，查看菜单是否拿到
////            menuList.forEach(menu -> {
////                System.out.println(menu.toString());
////            });
//            //定义一个最后得结果
//        List<Menu> menus=new ArrayList<>();
//        //如果菜单里面得parentId=0，则是一级菜单
//        for (int i=0;i<menuList.size();i++){
//            //说明这个菜单是一级菜单
//            if(menuList.get(i).getParentId()==0){
//                menus.add(menuList.get(i));     //设置了父级得菜单
//            }
//        }
//        //接下来就是要拿到一级菜单下面得子菜单
//        // 为一级菜单设置子菜单，getChild是递归调用的
//        for (Menu menu:menus){
//            //获取一级菜单得子菜单
//            menu.setChildMenus(getChild(menu.getId(),menuList));
//        }
//        menus.forEach(System.out::println);
//        return menus;
    }
        /*
        id:父级id
         */
    private List<Menu> getChild(Long id, List<Menu> menuList) {
        //定义一个子菜单得集合
        List<Menu> childList=new ArrayList<>();

        //关注如何实现递归
        for (Menu menu:menuList) {
            //menu.getId() 表示父级id 刚好等于一级菜单得id
            if(menu.getId().equals(id)){
                //这些菜单绝对是当前id下得子菜单
                childList.add(menu);
            }
        }


        //把子菜单在循环一遍
        for (Menu menu:childList) {
            //这里就是递归了
            menu.setChildMenus(getChild(menu.getId(),menuList));
        }

        if (childList.size()==0){
            return null;
        }
        return childList;
    }
}
